<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

    <script>
        /*
            总结：
                1. let 和 const 在声明之前不能被访问和使用
                     它们声明的内容不会发生预解析
                2. let 和 const 都不能被重复声明
                3. let 声明的是变量，可以被修改
                   const 声明的是常量，不允许被修改
                4. let 和 const 声明的内容都不会自动挂载到 window 上
                     因为它们会开启 块级作用域
                5. let 和 const 在分支、循环、函数会开启块级作用域 {}

            使用频率：
                a. 应该let会用的更多一些，const设置的不变的内容会少一些
                b. 但是实际工作中，一般很多情况为了不让其他人修改，
                    会把返回的数据或者定义的内容使用const定义(推荐)
                    在工程化项目中，一般会选配一些语法检查的工具
                    如果一个变量没有被修改过，会提示"报错", 建议把let换成const
        */

        // 1. 使用let和const声明变量和常量
        // es5
        // console.log(num);  // 允许
        var num = 100;
        var num = 'abc';   // 允许
        num = true;        // 允许

        // console.log(num);
        // console.log(window.num);  // 允许

        if (true) {
            var num1 = 10086;
        }

        // console.log(num1);   // 允许


        // es6
        // console.log(count);      // 报错 在没有初始化count之前不能够被访问
        let count = 18;
        // let count = 'abc';       // 报错，不能声明已经被定义过的标识
        count = true;

        // console.log(count);         // 允许，变量就是可以被赋值为其他的数据类型
        // console.log(window.count);  // undefined, 没有被挂载到window上

        if (true) {
            let count1 = 888;
        }
        // console.log(count1);        // 报错，在没有初始化count之前不能够被调用
        //  因为let声明的变量会开启块级作用域


        // 使用const
        // console.log(user);      // 在定义之前不允许被访问，没有预解析
        const user = '迪丽热巴';
        // const user = '古力娜扎';    // 报错，不能声明已经被定义了的标识

        // user = '古力娜扎';         // 常量的值是不能被修改的

        console.log(user);
        console.log(window.user);     // undefined

        if (true) {
            const user1 = 'aaa';
        }

        console.log(user1);         // 报错


    </script>
</body>

</html>